home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-03 | 37.5 KB | 1,386 lines | [TEXT/MPS ] |
- //----------------------------------------------------------------------------------------
- // UQuickTime.cp
- // Copyright © 1996 by Apple Computer, Inc. All rights reserved.
- // Based on a contribution by Steven Friedrich
- //----------------------------------------------------------------------------------------
-
- #ifndef __UQUICKTIME__
- #include "UQuickTime.h"
- #endif
-
- //Toolbox
-
- #ifndef __COMPONENTS__
- #include <Components.h>
- #endif
-
- #ifndef __ERRORS__
- #include <Errors.h>
- #endif
-
- #ifndef __FILES__
- #include <Files.h>
- #endif
-
- #ifndef __GESTALTEQU__
- #include <GestaltEqu.h>
- #endif
-
- #ifndef __STDIO__
- #include <StdIO.h>
- #endif
-
- const CommandNumber cPlayEveryFrame = 1001;
- const CommandNumber cHalfSize = 1002;
- const CommandNumber cNormalSize = 1003;
- const CommandNumber cDoubleSize = 1004;
- const CommandNumber cLoop = 1005;
- const CommandNumber cAutoRewind = 1006;
- const CommandNumber cPlayWhenInactive = 1007;
-
- //----------------------------------------------------------------------------------------
- // InitUQuickTime
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void InitUQuickTime()
- {
-
- if (!HasQuickTime()) // balk if QuickTime isn't present
- {
- #if qDebug
- ProgramBreak("InitUQuickTime called but QuickTime isn't present.");
- #endif
-
- return;
- }
-
- // Initialize the QuickTime movie environment
- FailOSErr(EnterMovies());
- }
-
- //----------------------------------------------------------------------------------------
- // FailComponentErr
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void FailComponentErr(ComponentResult theResult)
- {
- if (theResult)
- ProgramBreak("A ComponentResultError has occured.");
- }
-
- //========================================================================================
- // CLASS TMovie
- //========================================================================================
- #undef Inherited
- #define Inherited TObject
-
- #pragma segment AInit
- MA_DEFINE_CLASS_M1(TMovie,
- Inherited);
-
- //----------------------------------------------------------------------------------------
- // TMovie Constructor:
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- TMovie::TMovie() :
- fOriginalBox(gZeroRect),
- fMovie(NULL),
- fPlayEveryFrame(FALSE)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie Destructor:
- //----------------------------------------------------------------------------------------
- #pragma segment AClose
-
- TMovie::~TMovie()
- {
- if (fMovie)
- DisposeMovie(fMovie);
-
- fMovie = NULL;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::IMovie
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovie::IMovie(TFile* file)
- {
- IObject();
-
- //
- // make a movie from the file
- //
- file->OpenFile(); // in case it's not already open
-
- Movie newMovie;
- short actualResID = (short)DoTheRightThing;
- FailOSErr(NewMovieFromFile(&newMovie, file->fRsrcRefNum, &actualResID, NULL, newMovieActive, NULL));
- fMovie = newMovie;
-
- //
- // spruce up the movie bounds
- //
- CRect aRect(GetBox());
- if (aRect.Empty())
- aRect = CRect(20, 100, 200, 116); // use a default size in this case
-
- SetBox(aRect - aRect[topLeft]); // make sure the top left is 0,0
- fOriginalBox = aRect - aRect[topLeft];
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::GetDuration
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
- TimeValue TMovie::GetDuration() const
- {
- // ??? in seconds?
- return GetMovieDuration(fMovie) / GetMovieTimeScale(fMovie);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::GetPoster
- //----------------------------------------------------------------------------------------
- #pragma segment ANonRes
-
- PicHandle TMovie::GetPoster() const
- {
- PicHandle picHandle = GetMoviePosterPict(fMovie);
- CRect picFrame = (*picHandle)->picFrame;
-
- // If the picture frame is empty, return a NULL handle
- if (picHandle && picFrame.Empty())
- picHandle = (PicHandle)DisposeIfHandle((Handle)picHandle);
-
- return picHandle;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::GetBox
- //----------------------------------------------------------------------------------------
- #pragma segment ANonRes
-
- CRect TMovie::GetBox() const
- {
- CRect itsBox;
- GetMovieBox(fMovie, &itsBox);
-
- return itsBox;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::GetOriginalBox
- //----------------------------------------------------------------------------------------
- #pragma segment ANonRes
-
- CRect TMovie::GetOriginalBox() const
- {
- return fOriginalBox;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::SetBox
- //----------------------------------------------------------------------------------------
- #pragma segment ANonRes
-
- void TMovie::SetBox(const CRect& itsBox)
- {
- SetMovieBox(fMovie, itsBox);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::PutOnScrap
- //----------------------------------------------------------------------------------------
- #pragma segment AClipboard
-
- OSErr TMovie::PutOnScrap(long movieScrapFlags)
- {
- return PutMovieOnScrap(fMovie, movieScrapFlags);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::IsDone
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovie::IsDone() const
- {
- return IsMovieDone(fMovie);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::IsPlaying
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovie::IsPlaying() const
- {
- return (fPlayEveryFrame || GetMovieRate(fMovie) != 0) && !IsDone();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::Start
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovie::Start()
- {
- if (!fPlayEveryFrame)
- StartMovie(fMovie);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::Stop
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovie::Stop()
- {
- if (!fPlayEveryFrame)
- StopMovie(fMovie);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::SetPlayEveryFrame
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovie::SetPlayEveryFrame(Boolean playEveryFrame)
- {
- fPlayEveryFrame = playEveryFrame;
- }
-
- //========================================================================================
- // CLASS TMovieViewIdler
- //========================================================================================
- #undef Inherited
- #define Inherited TEventHandler
-
- #pragma segment AInit
- MA_DEFINE_CLASS_M1(TMovieViewIdler,
- Inherited);
-
- //----------------------------------------------------------------------------------------
- // TMovieViewIdler Constructor
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- TMovieViewIdler::TMovieViewIdler() :
- fMovieView(NULL)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieViewIdler::IMovieViewIdler
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieViewIdler::IMovieViewIdler(TMovieView* itsMovieView)
- {
- IEventHandler(NULL);
-
- fMovieView = itsMovieView;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieViewIdler::DoIdle
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieViewIdler::DoIdle(IdlePhase phase)
- {
-
- Boolean returnVal;
- if (fMovieView && phase == idleContinue)
- returnVal = !fMovieView->IdleMovies(); // if no longer playing then I got freed
- else
- returnVal = Inherited::DoIdle(phase);
-
- return FALSE;
- }
-
- //========================================================================================
- // CLASS TMovieView
- //========================================================================================
- #undef Inherited
- #define Inherited TView
-
- #pragma segment AInit
- MA_DEFINE_CLASS_M1(TMovieView,
- Inherited);
-
- //----------------------------------------------------------------------------------------
- // TMovieView Constructor
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- TMovieView::TMovieView() :
- fMovie(NULL),
- fMovieController(NULL),
- fPlayWhenInactive(FALSE),
- fWasPlaying(FALSE),
- fIdler(NULL),
- fMovieClipIsValid(FALSE),
- fLoop(FALSE),
- fAutoRewind(FALSE)
- {
- fMovieControllerIdentifier = kNoIdentifier;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView Destructor
- //----------------------------------------------------------------------------------------
- #pragma segment AClose
-
- TMovieView::~TMovieView()
- {
- if (fIdler)
- {
- gApplication->InstallCohandler(fIdler, FALSE);
- fIdler = (TMovieViewIdler *)FreeIfObject(fIdler);
- }
-
- if (fMovieController)
- fMovieController->AttachMovieView(NULL);
- fMovieController = NULL;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoPostCreate
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieView::DoPostCreate(TDocument* itsDocument)
- {
- fMovieControllerIdentifier = 'MCtl'; //### temporary until new template is available
-
- Inherited::DoPostCreate(itsDocument);
-
- fLoop = FALSE;
- fAutoRewind = FALSE;
-
- fMovieSize[hSel] = normalSize;
- fMovieSize[vSel] = normalSize;
-
- SetMovieSize(fMovieSize[hSel], fMovieSize[vSel]);
- if (fSuperView)
- {
- if (fMovieControllerIdentifier != kNoIdentifier)
- {
- TMovieController * itsController = (TMovieController *)GetRootView()->FindSubView(fMovieControllerIdentifier);
- if (itsController)
- itsController->AttachMovieView(this);
- #if qDebugMsg
- else
- {
- IDType itsID = fMovieControllerIdentifier;
- fprintf(stderr, "###In TMovieView::DoPostCreate, can't find MovieController: %.4s\n", (char*) & itsID);
- }
- #endif
-
- }
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::HaveMovie
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieView::HaveMovie(TMovie* movie)
- {
- fMovie = movie;
-
- Focus();
-
- if (fMovie)
- SetMovieGWorld(fMovie->GetMovie(), (CGrafPtr)GetGrafPort(), NULL);
-
- if (fMovieController)
- fMovieController->HaveMovie(fMovie);
-
- AdjustFrame();
- if (fSuperView)
- fSuperView->AdjustFrame();
-
- SetMovieSize(fMovieSize[hSel], fMovieSize[vSel]);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetLoop
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::SetLoop(Boolean loop)
- {
- fLoop = loop;
-
- if (fMovieController)
- FailComponentErr(MCDoAction(fMovieController->GetController(), mcActionSetLooping, (Ptr)fLoop));
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetMovieSize
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::SetMovieSize(VariableMovieSize newSizeH,
- VariableMovieSize newSizeV)
- {
- fMovieSize[hSel] = newSizeH;
- fMovieSize[vSel] = newSizeV;
-
- if (GetMovie())
- {
- CRect box(GetMovie()->GetOriginalBox());
-
- // Adjust view size based on size determiners.
- for (VHSelect vhs = vSel; vhs <= hSel; ++vhs)
- {
- if (fSizeDeterminer[vhs] == sizeVariable)
- switch (fMovieSize[vhs])
- {
- case halfSize:
- box[botRight][vhs] /= 2;
- break;
-
- case doubleSize:
- box[botRight][vhs] *= 2;
- break;
- }
- else
- box[botRight][vhs] = fSize[vhs] - 1;
- }
-
- SetFrame(VRect(box), kInvalidate);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetPlayWhenInactive
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieView::SetPlayWhenInactive(Boolean shouldPlay)
- {
- Boolean returnVal = fPlayWhenInactive;
-
- if (fPlayWhenInactive != shouldPlay)
- {
- fPlayWhenInactive = shouldPlay;
-
- if (!fIsActive && fWasPlaying)
- fMovie->Start();
-
- IdleMovies();
- }
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetFrame
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieView::SetFrame(const VRect& newFrame,
- Boolean invalidate)
- {
- if (newFrame != GetFrame())
- {
- Inherited::SetFrame(newFrame, invalidate);
-
- if (invalidate)
- ForceRedraw();
-
- AdjustOffsetsForController();
-
- if (fMovieController)
- fMovieController->MovieChangedFrame(newFrame, invalidate);
-
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::BeInPort
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieView::BeInPort(GrafPtr itsPort) // override
- {
- Inherited::BeInPort(itsPort);
-
- if (fMovie)
- SetMovieGWorld(fMovie->GetMovie(), (CGrafPtr)itsPort, NULL);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::Draw
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::Draw(const VRect& /*area*/ )
- {
- if (fMovie)
- {
- Boolean wasActive = TRUE;
- if (!IsPlaying())
- {
- wasActive = GetMovieActive(fMovie->GetMovie());
- if (wasActive)
- SetMovieActive(fMovie->GetMovie(), TRUE);
- }
-
- UpdateMovie(fMovie->GetMovie());
- MoviesTask(fMovie->GetMovie(), 0);
-
- if (!IsPlaying())
- {
- if (!wasActive)
- SetMovieActive(fMovie->GetMovie(), wasActive);
- }
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::Focus
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieView::Focus()
- {
- Boolean returnVal = Inherited::Focus();
-
- // keep the movie up to date with our coordinate sys… only if absolutely necessary
- if (returnVal && !fMovieClipIsValid)
- {
- CTemporaryRegion visRgn;
- GetVisibleRegion(visRgn);
-
- if (fMovieController && fMovieController->GetController())
- FailComponentErr(MCSetClip(fMovieController->GetController(), NULL, visRgn));
- else if (fMovie)
- SetMovieDisplayClipRgn(fMovie->GetMovie(), visRgn);
-
- fMovieClipIsValid = TRUE;
- }
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::InvalidateMovieClip
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::InvalidateMovieClip()
- {
- fMovieClipIsValid = FALSE;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::EnsureMovieClipIsValid
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::EnsureMovieClipIsValid()
- {
- if (!fMovieClipIsValid)
- Focus();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::Activate
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::Activate(Boolean entering)
- {
- Inherited::Activate(entering);
-
- if (entering != fIsActive)
- {
- fIsActive = entering;
-
- if (!fPlayWhenInactive)
- if (entering)
- {
- if (fWasPlaying)
- fMovie->Start();
- }
- else
- {
- fWasPlaying = IsPlaying();
- fMovie->Stop();
- }
- IdleMovies();
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::HaveMovieController
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::HaveMovieController(TMovieController* itsMovieController)
- {
- fMovieController = itsMovieController;
-
- AdjustOffsetsForController();
-
- if (fMovieController && fMovie)
- fMovieController->HaveMovie(fMovie);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::AdjustOffsetsForController
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::AdjustOffsetsForController()
- {
- if (fMovieController && Focus())
- {
- // reset to zero every time
- SetLocalOrigin(gZeroVPt, kDontRedraw);
-
- // calculate the distance between us and the controller
- CRect movieQDRect(GetQDExtent());
- VPoint movieLocation(QDToViewPt(movieQDRect[topLeft]));
-
- LocalToWindow(movieLocation);
- fMovieController->WindowToLocal(movieLocation);
-
- CPoint movieControllerQDOffset(fMovieController->ViewToQDPt(movieLocation));
-
- if (fMovie)
- fMovie->SetBox(movieQDRect + movieControllerQDOffset);
-
- SetLocalOrigin(VPoint(gZeroPt - movieControllerQDOffset), kDontRedraw);
-
- if (fMovie)
- MCMovieChanged(fMovieController->GetController(), fMovie->GetMovie());
-
- InvalidateMovieClip();
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovie::HasMovie
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
- Boolean TMovieView::HasMovie() const
- {
- //not totally safe - could have a movie object with no fMovie...change
- return fMovie ? TRUE : FALSE;
- }
- //----------------------------------------------------------------------------------------
- // TMovieView::DoMouseCommand
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::DoMouseCommand(VPoint& theMouse,
- TToolboxEvent* event,
- CPoint hysteresis)
- {
- // if a movieController is attached pass off mouse clicks to it
- if (IsEnabled())
- {
- if (fMovieController)
- {
- LocalToWindow(theMouse);
- fMovieController->WindowToLocal(theMouse);
- if (fMovieController->Focus())
- fMovieController->DoMouseCommand(theMouse, event, hysteresis);
- }
- else
- {
- if (event->fClickCount > 1)
- {
- if (fMovie->IsDone())
- GoToBeginningOfMovie(fMovie->GetMovie());
- fMovie->Start();
- }
- else
- fMovie->Stop();
- IdleMovies();
- }
- }
- else
- Inherited::DoMouseCommand(theMouse, event, hysteresis);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetIdleIfMoviePlaying
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieView::SetIdleIfMoviePlaying()
- {
- const long kMagicIdleNumber = 1;
-
- if (fLoop && fMovie && fMovie->IsDone())
- GoToBeginningOfMovie(fMovie->GetMovie());
-
- if (fAutoRewind && fMovie && fMovie->IsDone())
- {
- GoToBeginningOfMovie(fMovie->GetMovie());
- IdleMovies(); // since we will stop the idling process the frame wouldn't redraw
- }
-
- Boolean returnVal = IsPlaying();
-
- if (returnVal)
- {
- if (!fIdler)
- {
- fIdler = new TMovieViewIdler;
- fIdler->IMovieViewIdler(this);
- gApplication->InstallCohandler(fIdler, TRUE);
- }
- fIdler->SetIdleFreq(kMagicIdleNumber);
- }
- else
- {
- if (fIdler)
- fIdler->SetIdleFreq(kMaxIdleTime);
- }
-
- return returnVal;
- }
- //----------------------------------------------------------------------------------------
- // TMovieView::IsPlaying
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieView::IsPlaying() const
- {
- Boolean returnVal = FALSE;
-
- if (fMovie)
- returnVal = fMovie->IsPlaying();
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::IdleMovies
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieView::IdleMovies()
- {
- if (fMovieController)
- fMovieController->IdleMovies();
- else
- {
- if (fMovie && Focus())
- MoviesTask(fMovie->GetMovie(), 0);
- }
-
- return SetIdleIfMoviePlaying();
- }
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::InvalidateCoordinates
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::InvalidateCoordinates()
- {
- Inherited::InvalidateCoordinates();
-
- InvalidateMovieClip();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::IsActive
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieView::IsActive()
- {
- return fIsActive && Inherited::IsActive();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::ComputeFrame
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::ComputeFrame(VRect& newFrame)
- {
- Inherited::ComputeFrame(newFrame);
-
- if (fMovie)
- {
- CRect box(fMovie->GetBox());
-
- if (fSizeDeterminer[hSel] == sizeVariable)
- newFrame.right = newFrame.left + box.GetLength(hSel);
-
- if (fSizeDeterminer[vSel] == sizeVariable)
- newFrame.bottom = newFrame.top + box.GetLength(vSel);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoMenuCommand
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieView::DoMenuCommand(CommandNumber aCommandNumber)// override
- {
- switch (aCommandNumber)
- {
- case cAutoRewind:
- fAutoRewind = !fAutoRewind;
- break;
-
- case cLoop:
- SetLoop(!fLoop);
- break;
-
- case cPlayWhenInactive:
- SetPlayWhenInactive(!fPlayWhenInactive);
- break;
-
- case cHalfSize:
- case cNormalSize:
- case cDoubleSize:
- switch (aCommandNumber)
- {
- case cHalfSize:
- SetMovieSize(halfSize, halfSize);
- break;
-
- case cNormalSize:
- SetMovieSize(normalSize, normalSize);
- break;
-
- case cDoubleSize:
- SetMovieSize(doubleSize, doubleSize);
- break;
- }
- break;
-
- default:
- Inherited::DoMenuCommand(aCommandNumber);
- break;
- }
- }
-
-
- //========================================================================================
- // CLASS TMovieController
- //========================================================================================
- #undef Inherited
- #define Inherited TView
-
- #pragma segment AInit
- MA_DEFINE_CLASS_M1(TMovieController,
- Inherited);
-
- //----------------------------------------------------------------------------------------
- // TMovieView Constructor
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- TMovieController::TMovieController() :
- fMovieController(NULL),
- fMovieView(NULL),
- fIsActive(NULL),
- fPlayEveryFrame(NULL),
- fAutoSizeToMovie(TRUE)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView Destructor
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- TMovieController::~TMovieController()
- {
- if (fMovieView)
- fMovieView->HaveMovieController(NULL);
- fMovieView = NULL;
-
- if (fMovieController)
- CloseComponent(fMovieController);
- fMovieController = NULL;
- }
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoPostCreate
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieController::DoPostCreate(TDocument* itsDocument)
- {
- Inherited::DoPostCreate(itsDocument);
-
- fMovieController = (MovieController)OpenDefaultComponent(MovieControllerComponentType, kAnyComponentSubType);
- FailNIL(fMovieController);
-
- BeInPort(GetGrafPort());
- FailComponentErr(MCSetVisible(fMovieController, fShown));
- FailComponentErr(MCDoAction(fMovieController, mcActionSetKeysEnabled, (Ptr)TRUE));
-
- SetPlayEveryFrame(fPlayEveryFrame);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetFrame
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieController::SetFrame(const VRect& newFrame,
- Boolean invalidate)
- {
- Inherited::SetFrame(newFrame, invalidate);
-
- if (invalidate)
- ForceRedraw();
-
- if (fMovieController)
- FailComponentErr(MCSetControllerBoundsRect(fMovieController, &GetQDExtent()));
-
- if (fMovieView)
- fMovieView->AdjustOffsetsForController();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::Show
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieController::Show(Boolean state,
- Boolean redraw)
- {
- Inherited::Show(state, redraw);
-
- FailComponentErr(MCSetVisible(fMovieController, state));
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::BeInPort
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieController::BeInPort(GrafPtr itsPort)// override
- {
- Inherited::BeInPort(itsPort);
-
- if (fMovieController)
- FailComponentErr(MCSetControllerPort(fMovieController, (CGrafPtr)itsPort));
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::IdleMovies
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::IdleMovies()
- {
- if (Focus())
- FailComponentErr(MCIdle(fMovieController));
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoEvent
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::DoEvent(EventNumber eventNumber,
- TEventHandler* source,
- TEvent* event)
- {
- if (eventNumber == mBecameTarget)
- Activate(TRUE);
- else if (eventNumber == mResignedTarget)
- Activate(FALSE);
-
- Inherited::DoEvent(eventNumber, source, event);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoMouseCommand
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::DoMouseCommand(VPoint& theMouse,
- TToolboxEvent* event,
- CPoint hysteresis)
- {
- Boolean handled = FALSE;
-
- if (IsEnabled())
- {
- handled = MCClick(fMovieController, GetGrafPort(), ViewToQDPt(theMouse), event->fEventRecords[0].when, event->fEventRecords[0].modifiers);
- if (handled)
- {
- if (fMovieView)
- fMovieView->IdleMovies();
- else
- IdleMovies();
- }
- }
-
- if (!handled)
- Inherited::DoMouseCommand(theMouse, event, hysteresis);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoKeyEvent
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::DoKeyEvent(TToolboxEvent* event)// override
- {
- Boolean handled = FALSE;
-
- if (IsEnabled() && Focus())
- {
- handled = MCKey(fMovieController, event->fText[1], event->fEventRecords[0].modifiers);
- if (event->fDoubleEvent)
- handled = MCKey(fMovieController, event->fText[2], event->fEventRecords[1].modifiers);
-
- if (handled)
- {
- if (fMovieView)
- fMovieView->IdleMovies();
- else
- IdleMovies();
- }
- }
-
- if (!handled)
- Inherited::DoKeyEvent(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoCommandKeyEvent
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::DoCommandKeyEvent(TToolboxEvent* event)// override
- {
- Boolean handled = FALSE;
-
- if (IsEnabled() && Focus())
- {
- handled = MCKey(fMovieController, event->fText[1], event->fEventRecords[0].modifiers);
- if (event->fDoubleEvent)
- handled = MCKey(fMovieController, event->fText[2], event->fEventRecords[1].modifiers);
-
- if (handled)
- {
- if (fMovieView)
- fMovieView->IdleMovies();
- else
- IdleMovies();
- }
- }
-
- if (!handled)
- Inherited::DoKeyEvent(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::Draw
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::Draw(const VRect& /*area*/ )
- {
- // I only want to draw the controller not the associated movie. (It will draw itself)
- // So I set the movie's clip to empty in order to defeat the drawing of the movie that
- // would otherwise occur here. When finished I restore the original movie clipping.
-
- RgnHandle oldClip;
- FailComponentErr(MCGetClip(fMovieController, NULL, &oldClip));
-
- CTemporaryRegion emptyClip;
- SetEmptyRgn(emptyClip);
- FailComponentErr(MCSetClip(fMovieController, qd.thePort->clipRgn, emptyClip));
-
- FailComponentErr(MCDraw(fMovieController, GetGrafPort()));
-
- FailComponentErr(MCSetClip(fMovieController, NULL, oldClip));
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::Focus
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieController::Focus()
- {
- if (fMovieView)
- fMovieView->EnsureMovieClipIsValid();
-
- return Inherited::Focus();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::Activate
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::Activate(Boolean entering)
- {
- Inherited::Activate(entering);
-
- if (entering != fIsActive)
- {
- fIsActive = entering;
-
- SetActive(entering);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetActive
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::SetActive(Boolean state)
- {
- Focus();
-
- FailComponentErr(MCActivate(fMovieController, GetGrafPort(), state));
-
- // Because Movie ToolBox invalidates the extent of the control but we do
- // direct drawing in the unclipped area.
-
- CTemporaryRegion visibleRgn;
- GetVisibleRegion(visibleRgn);
-
- ValidateRegion(visibleRgn);
-
- DrawContents(); // draw in activated or deactivated state
- }
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::AttachMovieView
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::AttachMovieView(TMovieView* itsMovieView)
- {
- fMovieView = itsMovieView;
- if (fMovieView)
- fMovieView->HaveMovieController(this);
- }
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::HaveMovie
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::HaveMovie(TMovie* itsMovie)
- {
- FailComponentErr(MCSetMovie(fMovieController, itsMovie ? itsMovie->GetMovie() : NULL, fMovieView ? fMovieView->GetGrafPort() : GetGrafPort(), gZeroPt));
- FailComponentErr(MCSetControllerAttached(fMovieController, FALSE));
- FailComponentErr(MCDoAction(fMovieController, mcActionSetLooping, fMovieView ? (Ptr)fMovieView->fLoop : FALSE));
-
- SetPlayEveryFrame(fPlayEveryFrame);
-
- AdjustFrame();
- if (fSuperView)
- fSuperView->AdjustFrame();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetIdleIfMoviePlaying
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieController::SetIdleIfMoviePlaying()
- {
- Boolean returnVal = FALSE;
-
- if (fMovieView)
- returnVal = fMovieView->SetIdleIfMoviePlaying();
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::IsPlaying
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieController::IsPlaying() const
- {
- return fMovieView ? fMovieView->IsPlaying() : FALSE;
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::IsActive
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- Boolean TMovieController::IsActive()
- {
- return fIsActive && Inherited::IsActive();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::MovieChangedFrame
- //----------------------------------------------------------------------------------------
- #pragma segment AOpen
-
- void TMovieController::MovieChangedFrame(const VRect&/*newFrame*/ ,
- Boolean/*invalidate*/ )
- {
- AdjustFrame();
- if (fSuperView)
- fSuperView->AdjustFrame();
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::InvalidateCoordinates
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::InvalidateCoordinates()
- {
- Inherited::InvalidateCoordinates();
-
- if (fMovieView)
- fMovieView->InvalidateMovieClip();
- }
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetAutoSizeToMovie
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::SetAutoSizeToMovie(Boolean autoSize)
- {
- fAutoSizeToMovie = autoSize;
- }
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::SetPlayEveryFrame
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::SetPlayEveryFrame(Boolean playEveryFrame)
- {
- fPlayEveryFrame = playEveryFrame;
-
- Boolean wasPlaying = FALSE;
- if (fMovieView && fMovieView->GetMovie())
- {
- fMovieView->GetMovie()->SetPlayEveryFrame(fPlayEveryFrame);
- wasPlaying = fMovieView->IsPlaying();
- }
-
- if (wasPlaying)
- fMovieView->GetMovie()->Stop();
-
- FailComponentErr(MCDoAction(fMovieController, mcActionSetPlayEveryFrame, (Ptr)fPlayEveryFrame));
-
- if (wasPlaying)
- fMovieView->GetMovie()->Start();
- }
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::ComputeFrame
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::ComputeFrame(VRect& newFrame)
- {
- Inherited::ComputeFrame(newFrame);
-
- if (fAutoSizeToMovie && fMovieView)
- {
- newFrame = newFrame - newFrame[topLeft];// zero base
-
- VRect movieFrame(GetFrame());
- newFrame = newFrame + VPoint(movieFrame.left, movieFrame.bottom);
- newFrame.right = newFrame.left + movieFrame.GetLength(hSel);
- }
- }
-
-
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoSetupMenus
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::DoSetupMenus() // override
- {
- Inherited::DoSetupMenus();
-
- if (fMovieView->HasMovie())
- {
- EnableCheck(cLoop, TRUE, fMovieView->fLoop);
- EnableCheck(cAutoRewind, TRUE, fMovieView->fAutoRewind);
-
- EnableCheck(cPlayWhenInactive, TRUE, fMovieView->fPlayWhenInactive);
-
- EnableCheck(cHalfSize, TRUE, fMovieView->fMovieSize[hSel] == halfSize || fMovieView->fMovieSize[vSel] == halfSize);
- EnableCheck(cNormalSize, TRUE, fMovieView->fMovieSize[hSel] == normalSize || fMovieView->fMovieSize[vSel] == normalSize);
- EnableCheck(cDoubleSize, TRUE, fMovieView->fMovieSize[hSel] == doubleSize || fMovieView->fMovieSize[vSel] == doubleSize);
-
- EnableCheck(cPlayEveryFrame, TRUE, fPlayEveryFrame);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TMovieView::DoMenuCommand
- //----------------------------------------------------------------------------------------
- #pragma segment ARes
-
- void TMovieController::DoMenuCommand(CommandNumber aCommandNumber)// override
- {
- switch (aCommandNumber)
- {
- //
- // Forward some cases to the MovieView
- //
- case cAutoRewind:
- case cLoop:
- case cPlayWhenInactive:
- case cHalfSize:
- case cNormalSize:
- case cDoubleSize:
- fMovieView->DoMenuCommand(aCommandNumber);
- break;
-
- case cPlayEveryFrame:
- SetPlayEveryFrame(!fPlayEveryFrame);
- break;
-
- default:
- Inherited::DoMenuCommand(aCommandNumber);
- break;
- }
- }
-
- //----------------------------------------------------------------------------------------
- // End of UQuickTime.cp
-
- #pragma segment Inline
-
-